
{include file="webautocode@public/header"}

<style>
    .btn{
        width: 200px;
        height: 35px;
        border-radius: 15px;
    }
    .sp-left{
        display: inline-block;
        width: 200px;
        height: 35px;
        line-height: 35px;
        text-align: right;
    }
</style>
<!--<script>-->
<!--    layer.msg(123112,{time:30000})-->
<!--</script>-->
<form onsubmit="return false;"  method="post">
    <!--{empty name='$field_list'}-->
    <p class="help-block text-center well">没 有 记 录 哦！</p>
    <!--{else}-->
    <p class="help-block text-center well font-s20">【创建查询接口】</p>
    <div>
        <ul type="disc" style="margin: 20px">
            <li>*不勾选响应字段时，API将返回所有字段</li>
            <li>*多个条件字段则进行and查询</li>
            <li>*可以指定查询一条或多条（返回一维或二维数组）</li>
            <li>*在有关联表的情况下，关联表与主表的关联字段名必须相同</li>
            <li>*查询类型是可选的，根据业务来选择</li>
            <li>********************************</li>
            <li>可以生成单表查询：有and查询、like查询、时间范围查询、固定值查询</li>
            <li>可以生成多表查询：根据主表的字段去关联对应的表，查出的是二维数组</li>
            <li>可以生成统计查询：勾选生成选项即可</li>
            <li>********************************</li>
            <li>*生成接口时自动生成了接口文档</li>
            <li>********************************</li>
            <li><span style="color: #0f74a8">添加新增api时，关注必须的字段列即可</span></li>
            <li><span style="color: #0f74a8">添加修改api时，关注字段列和必须列，和修改条件</span></li>
        </ul>
    </div>
    <div>
        <input type="text" style="width: 20%" value="{$api_code_root_path}" class="layui-input-block code_save_path" placeholder="代码存放物理路径(默认存放在当前项目的根目录)">
    </div>
    <div style="margin: 30px">
        返回数据量：
        单条<input type="radio" name="return_data_num" style="width: 30px;height: 30px" value="one">
        多条<input type="radio" name="return_data_num" style="width: 30px;height: 30px" value="many">
    </div>
    <div style="margin: 30px">
        是否分页：
        是<input type="radio" name="is_pagelist" style="width: 30px;height: 30px" value="yes">
        否<input type="radio" name="is_pagelist" checked style="width: 30px;height: 30px" value="no">
    </div>
    <div style="margin: 30px">
        接口控制器名:
        <input type="text" class="api_controller_name" style="width: 200px;height: 30px" value="{$apiControllerName}">
    </div>
    <div style="margin: 30px">
        <input type="text" class="api_name" style="width: 200px;height: 30px" placeholder="请指定接口名称"
               onblur="ShowFields.saveApiName(this)" value="get{$apiControllerName}List">
        <input type="text" class="api_desc" style="width: 200px;height: 30px" value="获取{$table_comments}"
               placeholder="请说明接口用途">
    </div>
    <div style="margin: 30px">
        <input type="text" class="api_domain" style="width: 200px;height: 30px" placeholder="请指定接口访问域名">
    </div>
    <div style="margin: 30px;border-top: 2px solid gray;">
        <p>
            <span class="sp-left">生成普通查询、关联查询接口：</span>
            <input type="radio" name="create_api_type" style="width: 30px;height: 30px" value="normal_api" onclick="ShowFields.setFuncName('')">
        </p>
    </div>
    <table class="layui-table" >
        <thead>
        <tr>
            <th class='text-left nowrap'></th>
            <th class='text-left nowrap'>[{$tablename}]字段名称</th>
            <th class='text-left nowrap'>响应字段</th>
            <th class='text-left nowrap'>and查询条件字段</th>
            <th class='text-left nowrap'>表单是否必须</th>
            <th class='text-left nowrap' style="border-left: 1px solid;">是否为like查询</th>
            <th class='text-left nowrap'>时间范围类型</th>
            <th class='text-left nowrap' style="border-left: 1px solid;">查询字段关联数据(需要一次性选对,bug)</th>
            <th class='text-left nowrap' style="border-left: 1px solid;"></th>
        </tr>
        </thead>
        <tbody>
        {foreach $field_list as $key=>$vo}
        <tr>
            <td class='list-table-check-td'>
                &nbsp;
            </td>
            <td class='text-left nowrap'>
                {$vo}
            </td>
            <td class='text-left nowrap'>
                <input class="list-check-box" name="field_name" value='{$vo}' type='checkbox' style="width: 30px;height: 30px">
            </td>
            <td class='text-left nowrap'>
                <input class="list-check-box" name="condition_field" value='{$vo}' type='checkbox' style="width: 30px;height: 30px">
            </td>
            <td class='text-left nowrap'>
                <input class="list-check-box" name="is_must" value='{$vo}' type='checkbox' style="width: 30px;height: 30px">
            </td>
            <td class='text-left nowrap' style="border-left: 1px solid;">
                like查询<input class="like_field" name="like_field" value='{$vo}' type='checkbox' style="width: 30px;height: 30px;">
            </td>
            <td class='text-left nowrap'>
                时间范围查询<input class="" name="date_scope_field" value='{$vo}' type='checkbox' style="width: 30px;height: 30px">
            </td>
            <td class='text-left nowrap' style="border-left: 1px solid;">
                与副表关联
                <select name="rel_table" class="rel_table rel_table_{$vo}" onchange="ShowFields.getTableFieldsOptionHtml(this,'{$vo}')">
                    <option value="">--选择关联表--</option>
                    <!--{foreach $table_list as $key=>$tab_vo}-->
                    <option value="{$vo}-{$tab_vo}" data-tablename="{$tab_vo}">{$vo}-{$tab_vo}</option>
                    <!--{/foreach}-->
                </select>
                <select class="rel_field_{$vo}" onchange="ShowFields.groupRelField(this,'{$vo}')">
                    <option value="">--选择关联表主键字段--</option>

                </select>
            </td>
            <td class='text-left nowrap' style="border-left: 1px solid;">
                关联数据返回类型:
                <select class="" name="rel_data_return_type">
                    <option value="">选择类型</option>
                    <option value="{$vo}==two_arr">返回二维数组列表</option>
                    <option value="{$vo}==one_arr">返回一维数组</option>
                    <option value="{$vo}==field_val">返回字段值</option>
                </select>
                <input type="text" name="rel_data_return_type_field_name"
                       data-field="{$vo}"
                       placeholder="返回字段值时需填写" value="">
            </td>
        </tr>
        {/foreach}
        </tbody>
    </table>
<!--    <div style="margin: 30px">-->
<!--        开启校验模式：-->
<!--        字段必须：<input type="radio" name="is_check" style="width: 30px;height: 30px" value="yes">-->
<!--        非必须：<input type="radio" name="is_check" style="width: 30px;height: 30px" value="no">-->
<!--    </div>-->

    <div style="margin: 30px">



    </div>
    <div style="margin: 30px" class="api_url">

    </div>
    <div style="margin: 50px">
        <button class="btn" type="button" onclick="ShowFields.createapi()">生成查询API</button>
    </div>

    <p style="height: 100px">

    </p>
    <!--{/empty}-->
</form>
{include file='public/test_module'}
<script>
    let ShowFields = {
        _api_name:'get{$apiControllerName}List',
        saveApiName: function (obj){
            this._api_name = $(obj).val();
        },
        //新增
        tableAdd: function (){
            $('.layui-table .nowrap').eq(2).html('<span style="color: red;">请选择新增字段</span>');
        },
        tableUpdate: function (){
            $('.layui-table .nowrap').eq(2).html('<span style="color: red;">请选择修改字段</span>');
        },
        //设置接口名称
        setFuncName:function (name){
            if(!this._api_name){
                $('.api_name').val(this._api_name+name);
            }
        },
        //查询表的字段列表
        getTableFieldsOptionHtml: function (obj, main_table_field){
            let url = '{:url("reltablefieldsoptionhtml")}';
            let rel_table_name = $(obj).find('option:selected').attr('data-tablename');
            let data = {
                rel_table_name:rel_table_name
            };
            $.post(url,data,function (res){

                $('.rel_field_'+main_table_field).html(res.data);
            },'json');
        },
        //组装关联表select的值,组装为： id-fa_goods_deal
        groupRelField: function (obj, main_table_field){
            let table = $('.rel_table_'+main_table_field).val();
            $('.rel_table_'+main_table_field).find('option:selected').val(table+"=="+$(obj).val());
        }
        ,
        //执行创建api
        createapi: function (){
            let tablename='{$tablename}';
            let url = '{:url("createapi")}';
            //接口返回字段名
            let return_fields = $('input:checkbox[name="field_name"]:checked').map(function(){
                return $(this).val();
            }).get().join(',');

            //查询条件字段
            let condition_field = $('input:checkbox[name="condition_field"]:checked').map(function(){
                return $(this).val();
            }).get().join(',');
            let like_field = $('input:checkbox[name="like_field"]:checked').map(function(){
                return $(this).val();
            }).get().join(',');
            let return_data_num = $('input[name="return_data_num"]:checked').val();
            if(!return_data_num){
                return layer.msg('请选择返回【单条】还是【多条】数据');
            }


            //是否分页
            let is_pagelist = $('input[name="is_pagelist"]:checked').val();
            //接口域名
            let api_domain = $('.api_domain').val();
            let api_controller_name = $('.api_controller_name').val();
            if(!api_controller_name){
                return layer.msg('请指定接口控制器名');
            }

            let api_name = $('.api_name').val();
            if(!api_name){
                return layer.msg('请指定接口名');
            }
            //接口描述
            let api_desc = $('.api_desc').val();
            //是否必须
            let is_must = $('input:checkbox[name="is_must"]:checked').map(function(){
                return $(this).val();
            }).get().join(',');

            let rel_table = $('select[name="rel_table"]').map(function(){
                return $(this).val();
            }).get().join(',');

            //关联字段返回类型
            let rel_data_return_type = $('select[name="rel_data_return_type"]').map(function(){
                return $(this).val();
            }).get().join(',');

            let date_scope_field = $('input:checkbox[name="date_scope_field"]:checked').map(function(){
                return $(this).val();
            }).get().join(',');

            //固定字段值
            let fix_field_val = $('input[name="fix_field_val"]').map(function(){
                return $(this).val()?$(this).attr('data-field')+'--'+$(this).val():'';
            }).get().join(',');

            //api类型
            let create_api_type = $('input[name="create_api_type"]:checked').val();
            if(!create_api_type){
                return layer.msg('请选择api类型');
            }
            let rel_data_return_type_field_name = $('input[name="rel_data_return_type_field_name"]').map(function(){
                return $(this).val()?$(this).attr('data-field')+'--'+$(this).val():'';
            }).get().join(',');

            let data = {
                tablename:tablename,
                return_fields:return_fields,
                condition_field:condition_field,
                like_field:like_field,//like查询字段
                api_name:api_name,//接口名称
                api_desc:api_desc,//接口说明
                return_data_num:return_data_num,//返回数据类型
                //接口控制器名
                api_controller_name:api_controller_name,
                is_must:is_must,//是否必须
                //主表字段
                // main_table_field:$('.main_table_field').text(),
                //关联表（字段-表）
                rel_table:rel_table,//多个逗号隔开
                api_domain:api_domain,
                date_scope_field:date_scope_field,//时间范围查询
                fix_field_val:fix_field_val,//固定字段值
                // create_api_type:create_api_type,//接口类型
                code_save_path:$('.code_save_path').val(),//接口代码保存路径
                is_pagelist:is_pagelist,//是否分页
                rel_data_return_type:rel_data_return_type,//关联字段返回类型
                rel_data_return_type_field_name:rel_data_return_type_field_name,
            };
            // if(create_api_type == 'sum_api'){
            //     let sum_field = $('.sum_field').val();
            //     if(!sum_field){
            //         return layer.msg('生成求和接口必须填写求和字段名');
            //     }
            //     data.sum_field = sum_field;
            // }
            $.post(url,data,function (res){
                layer.msg(res.msg);
                if(res.code != 200){
                    return ;
                }

                $('.api_url').html(api_domain+res.data.api_url)
            },'json');



        }
    }
</script>
